/*
    Asignatura: Procesadores de lenguajes.
    Practica de labotario numero 9.
    Autores:
                Guillermo Garcia Juanes (Alu3889)
                Jose Antonio Hernandez Gonzalez (Alu3809)

    Fichero: AnasinXML.g
    Contenido: Analizador Sintactico practica numero 9.
*/
parser grammar AnasinXML;

options{
    tokenVocab = AnalexXML;
    k = 3;
}

@header{ package pl.equipo13.p9; }

//@rulecath { }

/*----------------------------------------------------REGLAS-SINTACTICO----------------------------------------------------*/

entrada[boolean autor]:  (registro[autor])* EOF;
registro[boolean autor]: MENOR a=IDENT { 
                                             if(a.getText().equals("libro"))
                                                autor = false;
                                             else if(a.getText().equals("autor") && !autor)
                                                autor = true;
                                              else if(a.getText().equals("autor") && autor)
                                                   System.out.println("Error: No se puede introducir mas de un autor");
                                       } 
                         atributo? MAYOR ((registro[autor]) | CADENA)* MENORBARRA c=IDENT MAYOR
                                       { 
                                            if(!a.equals(c))
                                                System.err.println("Error: Apertura o cierre no valido.");
                                            if(c.equals("libro"))
                                                autor = false;
                                       };
atributo: IDENT IGUAL VALOR;

//
//catch[RecognitionException ex] { 
// System.out.println("No se ha especificado autor para este libro ->" + tk.getText());
//
//    Token tk = input.LT(1); //Obtenemos el token
//    if(tk.getText() != "autor"){
//        System.out.println("No se ha especificado autor para este libro ->" + tk.getText());
//        input.consume();     //Consume el token y continua con la regla.  
//    }else
//        throw ex;
//}